// =====================================================================================
//  Copyright (C) 2025 by Jiaxing Shao. All rights reserved
//
//  文 件 名:  gstreamer_base.h
//  作    者:  Jiaxing Shao, 980853650@qq.com
//  创建时间:  2025-04-17 16:42:10
//  描    述:
// =====================================================================================
#pragma once

#include <deque>
#include <sstream>
#include <vector>

/**
 * @brief 原始图片数据
 *
 */
struct CameraImage {
    std::vector<uint8_t> data;   // 图片数据
    uint32_t             width;  // 图片宽
    uint32_t             height; // 图片高
};

/**
 * @brief 检测目标
 *
 */
struct Object {
    int         id;         // 目标ID
    int         left;       // 左
    int         top;        // 上
    int         width;      // 宽
    int         height;     // 高
    int         class_id;   // 类别ID
    std::string class_name; // 类别名称
    float       confidence; // 置信度
};

/**
 * @brief 相机检测结果数据
 *
 */
struct DetectResult {
    uint32_t           frame_id       = 0;  // 帧号
    int16_t            device_id      = -1; // 相机ID
    uint64_t           ntp_timestamp  = 0;  // ntp时间戳, 原始时间戳(nano seconds)
    uint64_t           landing_time   = 0;  // 落地时间戳（毫秒时间）
    uint64_t           detection_time = 0;  // 检测完成时间戳（毫秒时间）
    uint64_t           nvds_over_time = 0;  // pipeline 流程结束时间
    CameraImage        image_data;          // 图片数据
    std::deque<Object> objects;             // 目标数据
};

typedef std::vector<DetectResult> DetectResultList;